#include <iostream>

using namespace std;
using ll=long long;
const int N=2*1e5+10;

struct node{
	int l,r;
	ll v;
}tr[4*N];
int m,p;
int idx;
void pushup(int u)
{
	tr[u].v=max(tr[u<<1].v,tr[u<<1|1].v);
}
void build(int u,int l,int r)
{
	if(l==r)
	{
		tr[u]={l,r};
	}
	else{
		tr[u]={l,r};
		int mid=l+r>>1;
		build(u<<1,l,mid);
		build(u<<1|1,mid+1,r);
	}
}

void modify(int u,int x,int num)
{
	if(tr[u].l==x && tr[u].r==x)
	{
		tr[u]={x,x,num};
	}
	else{
		int mid=tr[u].l+tr[u].r>>1;
		if(x<=mid)
		{
			modify(u<<1,x,num);
		}
		else{
			modify(u<<1|1,x,num);
		}
		pushup(u);
	}
}
ll query(int u,int l,int r)
{
	if(tr[u].l>=l && tr[u].r<=r)
		return tr[u].v;
	else{
		int mid=tr[u].l+tr[u].r>>1;
		ll ret=0;
		if(l<=mid)
		{
			ret=query(u<<1,l,r);
		}
		if(r>mid)
		{
			ret=max(ret,query(u<<1|1,l,r));
		}
		return ret;
	}
}
int main()
{
	ll last=0;
	cin>>m>>p;
	idx=0;
	build(1,1,m);
	while(m--)
	{
		char op[2];
		int t;
		scanf("%s%d",op,&t);
		if(*op=='Q')
		{
			last=query(1,idx-t+1,idx);
			cout<<last<<endl;
		}	
		else{
			modify(1,++idx,(t+last)%p);
		}	
	}	
	return 0;
}
